home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / jovept1.arc / H19-DEMO.C < prev    next >
Text File  |  1985-05-30  |  5KB  |  299 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6. /* terminal control for h19 */
  7. /* after Trm.c */
  8. /* K. Mitchum 6/84 */
  9.  
  10. #include "tm.h"
  11. #include "jove.h"
  12.  
  13.  
  14.  
  15. /* define BIGH19 if using 25 lines */
  16. #define BIGH19
  17.  
  18.  
  19.  
  20. #define NCOLS 80
  21.  
  22. /* local equates for h19 escape sequences */
  23.  
  24.  
  25. #ifdef BIGH19
  26.  
  27. /* enable 25th line, restart cursor, no autolf, no autocr */
  28.  
  29. #define H19INIT "\033Y  \033E"
  30. #define H19EXIT "\033Y  \033E"
  31. #define LINES 25
  32. #else
  33.  
  34. /* same as above, disable 25th line */
  35.  
  36. #define H19INIT "\033y1\033y5\033y8\033y9\033E"
  37. #define H19EXIT "\033E"
  38. #define LINES 24
  39. #endif
  40.  
  41.  
  42. #define REVOFF "\033q"        /* reverse video off */
  43. #define REVON "\033p"        /* reverse video on */
  44. #define INSLN "\033L"        /* insert line */
  45. #define DELLN "\033M"        /* delete line */
  46. #define INSCHON "\033@"        /* enter insert character mode */
  47. #define INSCHOFF "\033O"    /* exit insert character mode */
  48. #define CURFWD "\033C"        /* cursor forward */
  49. #define CURDWN "\033B"        /* cursor down */
  50. #define CURUP "\033A"        /* cursor up */
  51. #define CURPOS "\033Y%c%c"    /* cursor positioning sequence */
  52. #define CURHOME "\033H"        /* cursor home, non destructive */
  53. #define KILLN "\033K"        /* kill line */
  54. #define DELCHR "\033N"        /* delete char */
  55. #define CLRSCN "\033E"        /* erase screen and home */
  56. #define BS 010            /* backspace char */
  57.  
  58.  
  59. /* padding constants */
  60.  
  61. #define KILLNPAD 0.05
  62. #define INSLNPAD 0.25
  63. #define DELLNPAD 0.25
  64. #define INSCHPAD 0.05
  65. #define CURPAD 0.01
  66. #define INITPAD 0.05
  67. #define DELPAD 0.05
  68. #define CLRSCNPAD 1.00
  69. #define REVPAD 0.10
  70.  
  71.  
  72. static int curX, curY, Baud, DesHL, CurHL;
  73.  
  74. static float BaudFactor;
  75.  
  76.  
  77. static
  78. enum IDmode { m_insert = 1, m_overwrite = 0} DesiredMode;
  79.  
  80. static
  81. enum Vmode { v_regular = 1, v_reverse = 0} Vimage;
  82.  
  83. static
  84. INSmode (new)
  85. enum IDmode new;
  86. {
  87.     DesiredMode = new;
  88. }
  89.  
  90. static HLmode (new)
  91. {
  92.     DesHL = new;
  93. }
  94.  
  95.  
  96. static SetHL (OverRide)
  97. {
  98.  
  99.  
  100.     register Des = OverRide ? 0 : DesHL;
  101.  
  102.     if (Des == CurHL)
  103.         return;
  104.     if (Vimage == v_reverse)
  105.         printf (Des ? REVOFF : REVON);
  106.     else
  107.         printf (Des ? REVON : REVOFF);
  108.     CurHL = Des;
  109.     pad(1,REVPAD);
  110.  
  111.  
  112. }
  113.  
  114.  
  115. static inslines(n)
  116. {
  117.     SetHL(1);
  118.  
  119.  
  120.     while(n--) {
  121.     printf(INSLN);
  122.     pad(1,INSLNPAD);
  123.     }
  124. }
  125.  
  126. static dellines(n)
  127. {
  128.     SetHL(1);
  129.  
  130.     while(n--) {
  131.     printf(DELLN);
  132.     pad(1,DELLNPAD);
  133.     }
  134. }
  135.  
  136. static writechars(start, end)
  137. register char *start, *end;
  138. {
  139.     int insmode =0;
  140.         
  141.     
  142.     SetHL(0);
  143.     if (DesiredMode == m_insert) {
  144.     printf(INSCHON);
  145.     insmode++;
  146.     }
  147.     while ((start <= end) && ((curY != (LINES -1)) || (curX < (NCOLS)))) {
  148.     pch(*start++);
  149.     curX++;
  150.     }
  151. }
  152.  
  153. static blanks(n)
  154. register n;
  155. {
  156.     int insmode;
  157.     int len = n;
  158.  
  159.     insmode = 0;
  160.     SetHL(0);
  161.     curX += n;
  162.     if (DesiredMode == m_insert) {
  163.     printf(INSCHON);
  164.     insmode++;
  165.     }
  166.     while(n--) pch(' ');
  167. }
  168.  
  169. static
  170. pad (n, f)
  171. float f; {
  172. return;
  173. }
  174.  
  175. static topos(row,column)
  176. register row, column;
  177. {
  178.     SetHL(1);
  179.     row++;
  180.     column++;
  181.     if(curX != column || curY != row) {
  182.     if(curX == column || curY == row) {
  183.         if(curX == column +1) pch(BS);
  184.         else if(curX == column -1) printf(CURFWD);
  185.         else if(curY == row +1) printf(CURUP);
  186.         else if(curY == row -1) printf(CURDWN);
  187.         else printf(CURPOS,row+31,column+31);
  188.     }
  189.     else {
  190.         if(row == 1 && column == 1) {
  191.         printf(CURHOME);
  192.         }
  193.         else printf(CURPOS,(row+31)&0x7f,(column+31)&0x7f);
  194.     }
  195.     curX = column;
  196.     curY = row;
  197. /*    pad(1,CURPAD);*/
  198.     }
  199. }
  200.  
  201.  
  202. static init (BaudRate)
  203. {
  204.     BaudFactor = BaudRate / 100.;
  205.     Baud = BaudRate;
  206. /*    MetaFlag++; */
  207. }
  208.  
  209. static reset()
  210. {
  211.     printf(H19INIT);
  212.     curX = curY = 1;
  213.     CurHL = 0;
  214.     DesiredMode = m_overwrite;
  215.     pad(1,INITPAD);
  216.     wipescreen();
  217. }
  218.  
  219. static cleanup()
  220. {
  221.     SetHL(1);
  222.     printf(H19EXIT);
  223.     topos(24,1);
  224.     sleep(1);
  225. }
  226.  
  227. static wipeline()
  228. {
  229.     SetHL(1);
  230.     printf(KILLN);
  231.     pad(1,KILLNPAD);
  232. }
  233.  
  234. static wipescreen()
  235. {
  236.     SetHL(1);
  237.  
  238. /*
  239. #ifdef BIGH19
  240.     topos(25,1);
  241.     printf(KILLN);
  242.     topos(1,1);
  243. #endif
  244. */
  245.     printf(CLRSCN);
  246.     pad(1,CLRSCNPAD);
  247. }
  248.     
  249. static delchars(n)
  250. {
  251.     int len = n;
  252.     
  253.     SetHL(1);
  254.     while(n--) printf(DELCHR);
  255.     pad(len,DELPAD);
  256. }
  257.  
  258.  
  259. Trm()
  260. {
  261.     Vimage = v_regular;
  262.  
  263.     tt.t_length = LINES;
  264.     tt.t_INSmode = INSmode;
  265.     tt.t_HLmode = HLmode;
  266.     tt.t_inslines = inslines;
  267.     tt.t_dellines = dellines;
  268.     tt.t_blanks = blanks;
  269.     tt.t_init = init;
  270.     tt.t_cleanup = cleanup;
  271.     tt.t_wipeline = wipeline;
  272.     tt.t_wipescreen = wipescreen;
  273.     tt.t_topos = topos;
  274.     tt.t_reset = reset;
  275.     tt.t_delchars = delchars;
  276.     tt.t_writechars = writechars;
  277.     tt.t_window = NULL;
  278.     reset();
  279.     return(tt.t_length);
  280. }
  281.  
  282.  
  283.  
  284.     
  285.     
  286. pch(c)
  287. {
  288.     Putc(c,&termout);
  289. }
  290.  
  291.  
  292.  
  293. putp(p)
  294. char p;
  295. {
  296.     writechars(&p,&p);
  297.     return;
  298. }
  299.